// 引入Vue和VueRouter
import Vue from "vue"
import VueRouter from "vue-router"
//引入store
import store from "@/store"
// console.log(store);

// 引入路由表
import routes from "./routes"

//使用VueRouter
Vue.use(VueRouter)

//创建路由器对象
const router = new VueRouter({
    mode: "history",
    routes: routes,
    scrollBehavior() {
        return {
            x: 0,
            y: 0
        }
    }
})

// 全局前置守卫----路由鉴权
// 1.设置白名单
const whiteList = ["login", "register", "addCartSuccess", "detail", "home", "search", ]
// 2.设置全局前置守卫
router.beforeEach(async (to, from, next) => {
    // console.log(1);
    // 定义token
    const token = store.state.user.token
    // 3.如果有token  
    if (token) {

        // console.log(2);
        // 5.如果去的地方是登陆页，则直接跳转到首页
        if (to.name === "login") {
            next("home")
        } else {
            // 6.如果去的地方不是登录页，则需要判断是否有用户信息
            const isUserInfo = !!store.state.user.userInfo.nickName
            // 如果有用户信息，则直接获取全部权限
            if (isUserInfo) {
                next()
            } else {
                // 如果没有用户信息，则需要请求获取用户信息,再拥有全部权限
                // console.log(11111);
                try {
                    // 发送请求，获取用户信息
                    await store.dispatch("user/getUserInfo")
                    next()
                } catch (e) {
                    // 若果获取用户信息异常,说明token过期或者被篡改了，需要清空token,重新登陆
                    store.dispatch("user/logoutAsync")
                    next("/login")
                }
            }
        }
    } else {
        // 4.如果没有token
        if (whiteList.includes(to.name)) { //如果去的路由在白名单中，则直接放行
            // console.log(3);
            next()
        } else { //如果去的路由不在白名单中，则跳转至登陆页面
            // console.log(4);
            next("login")
        }
    }
})

//暴露
export default router